/**
 * API配置文件
 * 统一管理API基础配置、环境变量和常量
 * 这个文件定义了整个API模块的基础配置，包括URL、超时时间、重试机制等
 */

// API基础配置对象
// 这个对象包含了所有API相关的配置项，供其他模块使用
export const API_CONFIG = {
  // 基础URL配置
  // 优先使用环境变量VITE_API_BASE_URL的值，如果没有设置则使用默认的本地开发地址
  // import.meta.env是Vite提供的环境变量访问方式，在Node.js环境中可能未定义
  // || 是逻辑或运算符，当左侧值为falsy时返回右侧值
  BASE_URL: (typeof import.meta !== 'undefined' && import.meta.env?.VITE_API_BASE_URL) || 'http://localhost:3000/api',

  // 请求超时时间配置
  // 单位：毫秒，30000毫秒 = 30秒
  // 超过这个时间的请求将被自动取消
  TIMEOUT: 30000,

  // 重试机制配置对象
  // 当请求失败时，会自动重试以提高成功率
  RETRY: {
    // 最大重试次数，包括首次请求，总共最多尝试3次
    maxAttempts: 3,
    // 初始重试延迟时间，单位：毫秒
    delay: 1000,
    // 退避倍数，每次重试的延迟时间会乘以这个值
    // 第1次重试：1000ms，第2次重试：2000ms，第3次重试：4000ms
    backoff: 2,
  },

  // 默认请求头配置对象
  // 这些头部信息会添加到所有HTTP请求中
  HEADERS: {
    // 内容类型声明，告诉服务器我们发送的是JSON格式数据
    'Content-Type': 'application/json',
    // 接受的内容类型声明，告诉服务器我们期望接收JSON格式的响应
    'Accept': 'application/json',
  },

  // API版本标识
  // 用于版本控制和向后兼容性管理
  VERSION: 'v1',

  // 数据源配置
  // 控制是否使用模拟数据还是真实API
  // true: 使用模拟数据，false: 使用真实API
  USE_MOCK_DATA: (typeof import.meta !== 'undefined' && import.meta.env?.VITE_USE_MOCK_DATA === 'true') || false,

  // HTML代码管理模块配置
  // 可以单独控制HTML代码管理模块是否使用模拟数据
  HTML_CODE_MANAGEMENT: {
    // 是否使用模拟数据，优先级高于全局配置
    USE_MOCK_DATA: (typeof import.meta !== 'undefined' && import.meta.env?.VITE_HTML_CODE_USE_MOCK_DATA === 'true') ??
      (typeof import.meta !== 'undefined' && import.meta.env?.VITE_USE_MOCK_DATA === 'true') ??
      true, // 默认使用模拟数据
    // 模拟数据延迟时间（毫秒），模拟网络请求延迟
    MOCK_DELAY: (typeof import.meta !== 'undefined' && import.meta.env?.VITE_HTML_CODE_MOCK_DELAY) ?
      parseInt(import.meta.env.VITE_HTML_CODE_MOCK_DELAY) : 500,
  },

  // 文档管理模块配置
  // 可以单独控制文档管理模块是否使用模拟数据
  DOCUMENTATION: {
    // 是否使用模拟数据，优先级：模块环境变量 > 全局环境变量 > 默认值
    USE_MOCK_DATA: (typeof import.meta !== 'undefined' && import.meta.env?.VITE_DOCUMENTATION_USE_MOCK_DATA === 'true') ??
      (typeof import.meta !== 'undefined' && import.meta.env?.VITE_USE_MOCK_DATA === 'true') ??
      false, // 默认使用真实API
    // 模拟数据延迟时间（毫秒），模拟网络请求延迟
    MOCK_DELAY: (typeof import.meta !== 'undefined' && import.meta.env?.VITE_DOCUMENTATION_MOCK_DELAY) ?
      parseInt(import.meta.env.VITE_DOCUMENTATION_MOCK_DELAY) : 300,
    // 文档管理后端API基础URL（更新为新的 context-path）
    BASE_URL: (typeof import.meta !== 'undefined' && import.meta.env?.VITE_DOCUMENTATION_API_URL) || 'http://localhost:8080/doc/api/v1',
  },

  // 认证管理配置
  AUTH: {
    BASE_URL: (typeof import.meta !== 'undefined' && import.meta.env?.VITE_AUTH_API_URL) || 'http://localhost:8080/api/v1/auth',
  },

  // 系统管理模块配置（用户/角色/权限）
  ADMIN: {
    BASE_URL: (typeof import.meta !== 'undefined' && import.meta.env?.VITE_ADMIN_API_URL) || 'http://localhost:8080/api/v1/admin',
  },
  // 客户管理模块
  CUSTOMER: {
    BASE_URL: (typeof import.meta !== 'undefined' && import.meta.env?.VITE_CUSTOMER_API_URL) || 'http://localhost:8080/api/v1/customer',
  },

  // 分页相关配置对象
  // 定义了分页查询的默认参数和限制
  PAGINATION: {
    // 默认页码，从1开始计数
    defaultPage: 1,
    // 默认每页显示的数据条数
    defaultPageSize: 10,
    // 每页最大允许的数据条数，防止单次请求数据过多影响性能
    maxPageSize: 100,
  },
};

// API端点配置对象
// 定义了所有API接口的URL路径，使用RESTful风格
// :id 是路径参数占位符，会被实际的ID值替换
export const API_ENDPOINTS = {
  // 认证相关接口配置对象
  // 包含用户登录、注册、登出、刷新token等认证操作
  AUTH: {
    // 用户登录接口路径
    LOGIN: '/auth/login',
    // 用户注册接口路径
    REGISTER: '/auth/register',
    // 用户登出接口路径
    LOGOUT: '/auth/logout',
    // 刷新访问token接口路径
    REFRESH: '/auth/refresh',
    // 获取用户信息接口路径
    PROFILE: '/auth/profile',
    // 修改密码接口路径
    CHANGE_PASSWORD: '/auth/change-password',
  },

  // 项目管理相关接口配置对象
  // 包含项目的增删改查、批量操作、统计等接口
  PROJECTS: {
    // 获取项目列表接口路径
    LIST: '/projects',
    // 创建项目接口路径
    CREATE: '/projects',
    // 获取项目详情接口路径，:id会被具体项目ID替换
    DETAIL: '/projects/:id',
    // 更新项目接口路径，:id会被具体项目ID替换
    UPDATE: '/projects/:id',
    // 删除项目接口路径，:id会被具体项目ID替换
    DELETE: '/projects/:id',
    // 批量删除项目接口路径
    BATCH_DELETE: '/projects/batch-delete',
    // 获取项目统计信息接口路径
    STATS: '/projects/stats',
  },

  // 任务管理相关接口配置对象
  // 包含任务的增删改查、批量操作、统计等接口
  TASKS: {
    // 获取任务列表接口路径
    LIST: '/tasks',
    // 创建任务接口路径
    CREATE: '/tasks',
    // 获取任务详情接口路径，:id会被具体任务ID替换
    DETAIL: '/tasks/:id',
    // 更新任务接口路径，:id会被具体任务ID替换
    UPDATE: '/tasks/:id',
    // 删除任务接口路径，:id会被具体任务ID替换
    DELETE: '/tasks/:id',
    // 批量更新任务接口路径
    BATCH_UPDATE: '/tasks/batch-update',
    // 获取任务统计信息接口路径
    STATS: '/tasks/stats',
  },

  // 商品管理相关接口配置对象
  // 包含商品的增删改查、批量操作、图片上传、统计等接口
  PRODUCTS: {
    // 获取商品列表接口路径
    LIST: '/products',
    // 创建商品接口路径
    CREATE: '/products',
    // 获取商品详情接口路径，:id会被具体商品ID替换
    DETAIL: '/products/:id',
    // 更新商品接口路径，:id会被具体商品ID替换
    UPDATE: '/products/:id',
    // 删除商品接口路径，:id会被具体商品ID替换
    DELETE: '/products/:id',
    // 批量更新商品接口路径
    BATCH_UPDATE: '/products/batch-update',
    // 上传商品图片接口路径，:id会被具体商品ID替换
    UPLOAD_IMAGE: '/products/:id/images',
    // 获取商品统计信息接口路径
    STATS: '/products/stats',
  },

  // 分类管理相关接口配置对象
  // 包含分类的增删改查、树形结构等接口
  CATEGORIES: {
    // 获取分类列表接口路径
    LIST: '/categories',
    // 创建分类接口路径
    CREATE: '/categories',
    // 获取分类详情接口路径，:id会被具体分类ID替换
    DETAIL: '/categories/:id',
    // 更新分类接口路径，:id会被具体分类ID替换
    UPDATE: '/categories/:id',
    // 删除分类接口路径，:id会被具体分类ID替换
    DELETE: '/categories/:id',
    // 获取分类树形结构接口路径
    TREE: '/categories/tree',
  },

  CUSTOMERS: {
    LIST: '/customers',
    DETAIL: '/customers/:id',
    CREATE: '/customers',
    UPDATE: '/customers/:id',
    DELETE: '/customers/:id',
  },

  // 文件上传相关接口配置对象
  // 包含图片上传、文件上传、批量上传等接口
  UPLOAD: {
    // 上传图片接口路径
    IMAGE: '/upload/image',
    // 上传文件接口路径
    FILE: '/upload/file',
    // 批量上传文件接口路径
    MULTIPLE: '/upload/multiple',
  },

  // 用户管理相关接口配置对象
  // 包含用户的增删改查、角色管理等接口
  // 文档管理相关接口配置对象
  // 包含文档的增删改查、分类管理、搜索等接口
  DOCUMENTS: {
    // 获取文档列表接口路径（支持分页、筛选、搜索）
    LIST: '/documents',
    // 创建文档接口路径
    CREATE: '/documents',
    // 获取文档详情接口路径，:slug为文档唯一标识符
    DETAIL: '/documents/:slug',
    // 根据ID获取文档详情
    DETAIL_BY_ID: '/documents/id/:id',
    // 更新文档接口路径，:id会被具体文档ID替换
    UPDATE: '/documents/:id',
    // 删除文档接口路径，:id会被具体文档ID替换
    DELETE: '/documents/:id',
    // 增加文档浏览量接口路径
    INCREMENT_VIEW: '/documents/:id/increment-view',
    // 分类相关接口
    CATEGORIES: {
      // 获取分类列表接口路径（支持树形和平铺两种模式）
      LIST: '/categories',
      // 创建分类接口路径
      CREATE: '/categories',
      // 获取分类详情接口路径，:id会被具体分类ID替换
      DETAIL: '/categories/:id',
      // 更新分类接口路径，:id会被具体分类ID替换
      UPDATE: '/categories/:id',
      // 删除分类接口路径，:id会被具体分类ID替换
      DELETE: '/categories/:id',
    },
  },

  // 系统管理模块接口配置
  ADMIN: {
    USERS: {
      LIST: '/users',
      DETAIL: '/users/:id',
      CREATE: '/users',
      UPDATE: '/users/:id',
      DELETE: '/users/:id',
      RESET_PASSWORD: '/users/:id/reset-password',
      STATUS: '/users/:id/status',
      ASSIGN_ROLE: '/users/:id/role',
    },
    ROLES: {
      LIST: '/roles',
      DETAIL: '/roles/:id',
      CREATE: '/roles',
      UPDATE: '/roles/:id',
      DELETE: '/roles/:id',
      PERMISSIONS: '/roles/:id/permissions',
      USERS: '/roles/:id/users',
    },
    PERMISSIONS: {
      LIST: '/permissions',
      DETAIL: '/permissions/:id',
      CREATE: '/permissions',
      UPDATE: '/permissions/:id',
      DELETE: '/permissions/:id',
      TREE: '/permissions/tree',
    },
  },

  // HTML代码管理相关接口配置对象
  // 包含HTML代码的增删改查、预览、验证等接口
  HTML_CODES: {
    // 获取HTML代码列表接口路径
    LIST: '/html-codes',
    // 创建HTML代码接口路径
    CREATE: '/html-codes',
    // 获取HTML代码详情接口路径，:id会被具体HTML代码ID替换
    DETAIL: '/html-codes/:id',
    // 更新HTML代码接口路径，:id会被具体HTML代码ID替换
    UPDATE: '/html-codes/:id',
    // 删除HTML代码接口路径，:id会被具体HTML代码ID替换
    DELETE: '/html-codes/:id',
    // 批量删除HTML代码接口路径
    BATCH_DELETE: '/html-codes/batch-delete',
    // 获取HTML代码统计信息接口路径
    STATS: '/html-codes/stats',
    // 预览HTML代码接口路径，:id会被具体HTML代码ID替换
    PREVIEW: '/html-codes/:id/preview',
    // 验证HTML代码接口路径
    VALIDATE: '/html-codes/validate',
  },
};

// HTTP状态码配置对象
// 定义了常用的HTTP状态码常量，便于代码中使用和维护
export const HTTP_STATUS = {
  // 成功状态码
  // 请求成功
  OK: 200,
  // 资源创建成功
  CREATED: 201,
  // 请求成功但无返回内容
  NO_CONTENT: 204,

  // 客户端错误状态码
  // 请求参数错误
  BAD_REQUEST: 400,
  // 未授权，需要登录
  UNAUTHORIZED: 401,
  // 禁止访问，权限不足
  FORBIDDEN: 403,
  // 资源不存在
  NOT_FOUND: 404,
  // 资源冲突，如重复创建
  CONFLICT: 409,
  // 请求格式正确但语义错误，如数据验证失败
  UNPROCESSABLE_ENTITY: 422,

  // 服务器错误状态码
  // 服务器内部错误
  INTERNAL_SERVER_ERROR: 500,
  // 服务不可用
  SERVICE_UNAVAILABLE: 503,
};

// 错误消息配置对象
// 定义了各种错误情况对应的用户友好提示信息
export const ERROR_MESSAGES = {
  // 网络连接错误提示
  NETWORK_ERROR: '网络连接失败，请检查网络设置',
  // 请求超时错误提示
  TIMEOUT: '请求超时，请稍后重试',
  // 未授权错误提示
  UNAUTHORIZED: '登录已过期，请重新登录',
  // 权限不足错误提示
  FORBIDDEN: '没有权限访问此资源',
  // 资源不存在错误提示
  NOT_FOUND: '请求的资源不存在',
  // 服务器错误提示
  SERVER_ERROR: '服务器内部错误，请稍后重试',
  // 数据验证错误提示
  VALIDATION_ERROR: '数据验证失败',
  // 未知错误提示
  UNKNOWN_ERROR: '未知错误，请稍后重试',
};

// 环境配置对象
// 获取当前运行环境的配置信息
export const ENV_CONFIG = {
  // 判断是否为开发环境
  // 在Node.js环境中安全地检查Vite环境变量
  isDevelopment: (typeof import.meta !== 'undefined' && import.meta.env?.DEV) || false,
  // 判断是否为生产环境
  // 在Node.js环境中安全地检查Vite环境变量
  isProduction: (typeof import.meta !== 'undefined' && import.meta.env?.PROD) || false,
  // 获取API基础URL环境变量
  // 如果没有设置则返回默认值
  apiUrl: (typeof import.meta !== 'undefined' && import.meta.env?.VITE_API_BASE_URL) || 'http://localhost:3000/api',
  // 获取API密钥环境变量
  // 如果没有设置则返回空字符串
  apiKey: (typeof import.meta !== 'undefined' && import.meta.env?.VITE_API_KEY) || '',
};
